package com.iandun.web.framework.core.http;

import com.iandun.web.framework.core.constants.GlobalConstants;
import lombok.Getter;
import lombok.Setter;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * http响应对象
 *
 * @author :jason.liang
 * @date: 2021-05-19 17:17
 */
@Getter
@Setter
public class Response<T> {

    /**
     * 业务状态码(非http)
     */
    private int code;

    /**
     * 返回数据
     */
    private T data;

    /**
     * 状态描述
     */
    private String msg;

    /**
     * 返回时间(yyyy-MM-dd HH:mm:ss)
     */
    private String date;

    /**
     * 默认构造方法
     * <ol>
     *     <li>考虑到整体的一致性,故默认为成功状态,如果需要其他状态,请使用下方的构造</li>
     * </ol>
     */
    public Response() {
        this.code = ResponseStatus.OK.getCode();
        this.msg = ResponseStatus.OK.getMsg();
        // 因为SimpleDateFormat是线程不安全的所以只能在栈空间进行创建
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(GlobalConstants.DEFAULT_DATETIME_FORMAT);
        this.date = simpleDateFormat.format(new Date());
    }

    public Response(int code, String msg) {
        this.code = code;
        this.msg = msg;
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat(GlobalConstants.DEFAULT_DATETIME_FORMAT);
        this.date = simpleDateFormat.format(new Date());
    }

    /**
     * 请求是否是成功的
     *
     * @return 是否成功
     */
    public boolean isSuccess() {
        return this.code == ResponseStatus.OK.getCode();
    }
}
